package packVistas;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;

import packLigaDeFutbol.Equipo;
import packLigaDeFutbol.comboValue;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Calendar;
import java.util.LinkedHashMap;

import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.RowSpec;

import packLigaDeFutbol.*;

import java.awt.Color;
import javax.swing.SpinnerNumberModel;
import java.awt.Dimension;

public class ConfigurarTemporada extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private CheckboxList chckbxEquipos = null;
	private CheckboxList chckbxArbitros = null;
	private JSpinner spnEquipos;
	private JSpinner spnFecha;
	private JLabel lblError;

	public ConfigurarTemporada() {
		setModal(true);
		setBounds(100, 100, 450, 437);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new FormLayout(new ColumnSpec[] {
				ColumnSpec.decode("96px:grow"),},
				new RowSpec[] {
				FormFactory.RELATED_GAP_ROWSPEC,
				RowSpec.decode("47px"),
				RowSpec.decode("14px"),
				RowSpec.decode("fill:58px:grow"),
				RowSpec.decode("14px"),
				RowSpec.decode("fill:81px:grow"),
				FormFactory.MIN_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,}));
		{
			JPanel panel = new JPanel();
			contentPanel.add(panel, "1, 2, fill, fill");
			panel.setLayout(new FormLayout(new ColumnSpec[] {
					ColumnSpec.decode("right:96px:grow"),
					FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
					ColumnSpec.decode("left:94px"),
					FormFactory.RELATED_GAP_COLSPEC,
					ColumnSpec.decode("default:grow"),},
				new RowSpec[] {
					FormFactory.LINE_GAP_ROWSPEC,
					RowSpec.decode("20px"),}));
			{
				JLabel lblNumeroEquipos = new JLabel("N\u00FAmero de equipos:");
				panel.add(lblNumeroEquipos, "1, 2, right, center");
			}
			{
				spnEquipos = new JSpinner();
				spnEquipos.setModel(new SpinnerNumberModel(new Integer(0), new Integer(0), null, new Integer(2)));
				panel.add(spnEquipos, "3, 2, fill, top");
			}
		}
		{
			JLabel lblEquipos = new JLabel("Equipos");
			contentPanel.add(lblEquipos, "1, 3, center, center");
		}
		{

		}



		chckbxEquipos = new CheckboxList(GestorEquipos.getGestorEquipos().cargarEquipos()){
			@Override
			public Object getDataLabel(Object data){
				Equipo a = (Equipo)data;
				return a.getNombreEquipo();
			}
		};
		
		contentPanel.add(chckbxEquipos, "1, 4, fill, fill");
		{
			JLabel lblArbitros = new JLabel("\u00C1rbitros");
			contentPanel.add(lblArbitros, "1, 5, center, center");
		}

		{


			chckbxArbitros = new CheckboxList(GestorArbitros.get().cargarArbitros()){
				@Override
				public Object getDataLabel(Object data){
					Arbitro a = (Arbitro)data;
					return a.getNombreArbitro();
				}
			};

			contentPanel.add(chckbxArbitros, "1, 6, fill, fill");
			{
			}
		}
		{
			JPanel panel = new JPanel();
			contentPanel.add(panel, "1, 7, fill, fill");
			panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
			{
				JLabel lblFechaDeInicio = new JLabel("Fecha de inicio:");
				panel.add(lblFechaDeInicio);
			}
			{
				spnFecha = new JSpinner();
				panel.add(spnFecha);
				spnFecha.setModel(new SpinnerDateModel(new Date(), null, null, Calendar.DAY_OF_YEAR));

			}
		}
		{
			lblError = new JLabel("");
			lblError.setForeground(Color.RED);
			contentPanel.add(lblError, "1, 9, center, default");
		}
		{
			JPanel buttonPane = new JPanel();
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			buttonPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
			{
				JButton btnAceptar = new JButton("Aceptar");
				btnAceptar.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
						int numEquiposParticipantes = (Integer)spnEquipos.getValue();
						int numArbitros = chckbxArbitros.getSelectedData().size();
						SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD");
						String fechaInicio = sdf.format(spnFecha.getValue());
						ArrayList<Equipo> equipos = chckbxEquipos.getSelectedData();
						if(numEquiposParticipantes % 2 != 0 || numEquiposParticipantes < 1) {
							lblError.setText("El numero de equipos debe ser positivo y par.");
						}else{
							if (numArbitros - 1 < numEquiposParticipantes/2){
								lblError.setText("Debes seleccionar mas de la mitad de arbitros que de equipos.");
							}else{
								if(equipos.size() != numEquiposParticipantes) {
									lblError.setText("El numero de equipos seleccionados no coincide con el numero de participantes.");
								}else{
									lblError.setText("");
									for(int i = 0; i < equipos.size(); i++) {
										GestorTemporadas.get().agregarEquipoALista(equipos.get(i));
									}
									ArrayList<Arbitro> arbitros = chckbxArbitros.getSelectedData();
									for(int i = 0; i < arbitros.size(); i++) {
										GestorTemporadas.get().agregarArbitroALista(arbitros.get(i));
									}
									try {
										Temporada.getTemporada().realizarSorteo(numEquiposParticipantes, fechaInicio, equipos, arbitros);
										JOptionPane.showMessageDialog(new JFrame(), 
												"La temporada ha sido configurada correctamente.", 
												getTitle(),JOptionPane.INFORMATION_MESSAGE);
										dispose();
									} catch (ParseException e) {
										// TODO Auto-generated catch block
										e.printStackTrace();
									}
								}
							}
						}
					}
				});
				btnAceptar.setActionCommand("OK");
				buttonPane.add(btnAceptar);
				getRootPane().setDefaultButton(btnAceptar);
			}
			{
				JButton btnCancelar = new JButton("Cancelar");
				btnCancelar.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
						dispose();
					}
				});
				btnCancelar.setActionCommand("Cancel");
				buttonPane.add(btnCancelar);
			}
		}
	}
}